//电影票务模块头文件

#ifndef MOVIE_TICKET_H
#define MOVIE_TICKET_H

#include <stddef.h> //size_t

// 电影数据结构
typedef struct {
    char id[10];
    char name[64];
} Movie;

// 电影场次数据结构
typedef struct {
    char id[10];          // 场次ID (S001, S002等)
    char hall_number[16]; // 影厅号
    char show_time[32];   // 放映时间，如 "14:00"
    char type[16];        // 场次类型，如 "普通场", "3D MAX场"
    float price;
    char seat_map_file[128]; // 座位图文件路径
} MovieSession;

// 座位状态枚举
typedef enum {
    SEAT_AVAILABLE, // 可选 (0)
    SEAT_SOLD,      // 已售 (1)
    SEAT_SELECTED   // 已选 (仅在购票流程中临时状态，不在文件中保存)
} SeatStatus;

// 已选座位及其对应的按钮对象结构体
typedef struct {
    int row;
    int col;
    void *btn_obj; // 存储座位按钮的指针 (lv_obj_t*), 使用 void* 以避免在此处包含 lvgl.h
} SelectedSeat;

// 座位图文件路径前缀
#define SEAT_MAP_FILE_PREFIX "seats_"
// 最大已选座位数量
#define MAX_SELECTED_SEATS (6 * 12) 

// 全局变量声明
extern char g_selected_movie_id[10];
extern char g_selected_session_id[20]; // 这个变量将存储复合ID，如 "M001_S001"
extern SeatStatus g_current_seat_map[6][12]; 
extern int g_current_seat_map_rows;
extern int g_current_seat_map_cols;
extern SelectedSeat g_selected_seats_list[MAX_SELECTED_SEATS];
extern int g_num_selected_seats;
extern float g_current_total_price;

// 电影和场次数据及文件I/O函数声明
int load_movies(Movie movies[], int max_movies);
const Movie* get_movie_by_id(const char* movie_id);
const char* get_movie_name_by_id(const char* movie_id);
const MovieSession* get_session_by_id(const char* composite_session_id);
const MovieSession* get_session_by_id_pure(const char* original_session_id);
void get_session_details_by_composite_id(const char* composite_session_id, char* buffer, size_t buffer_size);
int load_seat_map(const char *session_id, SeatStatus seat_map[6][12], int *rows, int *cols);
int save_seat_map(const char *session_id, const SeatStatus seat_map[6][12], int rows, int cols);
int record_purchase_info(const char *username, const char *movie_id, const char *session_id, int ticket_count, const char *selected_seats);

#endif // MOVIE_TICKET_H
